<template>
  <div class="audition144">
    <h3><strong>反柯里化，作用在于扩大函数的适用性，使本来作为特定对象所拥有的功能函数可以被任意对象所使用。</strong></h3>
    <p>反柯里化通用式：</p>
    <v-md-preview :text="text1" />
    <p>举个例子：</p>
    <v-md-preview :text="text2" />
    <p>s方法是定义在构造函数F上的，只有F的实例能使用。此时如果非实例对象想使用s方法，就可以用uncurry方法处理：</p>
    <v-md-preview :text="text3" />
  </div>
</template>

<script>
const prefix = '``` js'
const suffix = '```'
export default {
  name: 'Audition144',
  data() {
    return {
      text1: `${prefix}
      function uncurry(fn) {
        return function (...args) {
          return fn.call(...args);
        }
      }
      \n${suffix}`,
      text2: `${prefix}
      function F() {}
      F.prototype.s = function () {
        let args = Array.from(arguments)[0]
        return '我是' + args.name + ',我' + args.age + '岁了。'
      }
      const obj = {
        name: 'dilireba',
        age: 18
      }
      \n${suffix}`,
      text3: `${prefix}
      function uncurry(fn) {
        return function (...args) {
          return fn.call(this, ...args)
        }
      }
      let s = uncurry(F.prototype.s)
      console.log(s(obj)) // 我是dilireba,我18岁了。
      \n${suffix}`,
    }
  }
}
</script>

<style>

</style>